package com.sojson.project.monitor.job.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sojson.project.monitor.job.entity.dto.JobDto;
import com.sojson.project.monitor.job.entity.dto.JobPageDto;
import com.sojson.project.monitor.job.entity.po.Job;
import com.sojson.project.monitor.job.entity.vo.JobVo;

/**
 * 定时任务调度表Service
 * 
 * @author liu
 * @date 2022-10-24
 */
public interface JobService extends IService<Job> {

    /**
     * 单条插入
     * 
     * @param dto
     * @return
     * @throws Exception 
     */
    boolean add(Job dto) throws Exception;

    /**
     * 通过id更新
     * 
     * @param dto
     * @return
     * @throws Exception 
     */
    boolean update(Job dto) throws Exception;

    /**
     * 更新任务
     *
     * @param dto      任务对象
     * @param jobGroup 任务组名
     */
    void updateSchedulerJob(JobVo dto, String jobGroup) throws Exception;

    /**
     * 通过对象查找
     * 
     * @param dto
     * @return
     */
    List<JobVo> list(JobDto dto);

    /**
     * 通过对象分页查找
     * 
     * @param dto
     * @return
     */
    List<JobVo> page(JobPageDto dto);

    /**
     * 通过id列表删除
     * 
     * @param ids
     * @return
     * @throws Exception 
     */
    boolean removeByIds(List<String> ids) throws Exception;

    /**
     * 删除任务后,所对应的trigger也将被删除
     * 
     * @param dto
     * @return
     * @throws Exception
     */
    int deleteJob(JobVo dto) throws Exception;

    /**
     * 通过对象删除
     * 
     * @param dto
     * @return
     */
    boolean removeByDto(JobDto dto);

    /**
     * 清空数据
     * 
     * @return
     */
    boolean clear();

    /**
     * 通过id查找
     * 
     * @param id
     * @return
     */
    JobVo findById(String id);

    /**
     * 暂停任务
     * 
     * @param dto
     * @return
     * @throws Exception
     */
    int pauseJob(Job dto) throws Exception;

    /**
     * 恢复任务
     * 
     * @param dto
     * @return
     * @throws Exception
     */
    int resumeJob(Job dto) throws Exception;

    /**
     * 通过id修改状态
     * 
     * @param dto
     * @return
     * @throws Exception 
     */
    int updateStatusById(Job dto) throws Exception;

    /**
     * 定时任务立即执行一次
     * 
     * @param dto
     * @return
     * @throws Exception
     */
    int run(Job dto) throws Exception;

}